package thread;

import java.util.Random;
/*  给定一个很长的数组 (长度 1000w), 通过随机数的方式生成 1-100 之间的整数.
    1. 实现代码, 能够创建两个线程, 对这个数组的所有元素求和.
    2. 其中线程1 计算偶数下标元素的和, 线程2 计算奇数下标元素的和.
    3. 最终再汇总两个和, 进行相加
    4. 记录程序的执行时间.   */
public class Test {
    private static int array_size = 10_000_000;
    private static int[] array = new int[array_size];
    private static int evenSum = 0;    //  偶数下标和
    private static int oddSum = 0;     //  奇数下标和

    public static void main(String[] args) throws InterruptedException {
        //  生成随机数
        Random random = new Random();
        for (int i = 0; i < array_size; i++) {
            array[i] = random.nextInt(100) + 1;
        }

        //  记录开始时间
        long startTime = System.currentTimeMillis();

        //  线程1 计算偶数下标之和
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < array_size; i += 2) {
                evenSum += array[i];
            }
        });

        //  线程2 计算奇数下标之和
        Thread t2 = new Thread(() -> {
            for (int i = 1; i < array_size; i += 2) {
                oddSum += array[i];
            }
        });

        t1.start();
        t2.start();

        t1.join();
        t2.join();

        //  记录结束时间
        long endTime = System.currentTimeMillis();

        //  偶数下标 和 奇数下标 之和
        int total = evenSum + oddSum;
        System.out.println(total);

        //  执行程序所用时间
        long time = endTime - startTime;
        System.out.println(time + "ms");
    }
}
